(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0, S(y)) → False
!EQ(S(x), 0) → False
!EQ(0, 0) → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)
Rewrite Strategy: INNERMOST
 
(1) DecreasingLoopProof (EQUIVALENT transformation)
The following loop(s) give(s) rise to the lower bound Ω(n1):
The rewrite sequence
prefix(Cons(x', xs'), Cons(x, xs)) →+ and(!EQ(x', x), prefix(xs', xs))
gives rise to a decreasing loop by considering the right hand sides subterm at position [1].
The pumping substitution is [xs' / Cons(x', xs'), xs / Cons(x, xs)].
The result substitution is [ ].
(2) BOUNDS(n^1, INF)
(3) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(4) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)
Rewrite Strategy: INNERMOST
 
(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(6) Obligation:
Innermost TRS:
Rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
(7) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
prefix, 
!EQ, 
domatch, 
eqNatListThey will be analysed ascendingly in the following order:
!EQ < prefix
prefix < domatch
!EQ < eqNatList
 
(8) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x', 
xs'), 
Cons(
x, 
xs)) → 
and(
!EQ(
x', 
x), 
prefix(
xs', 
xs))
domatch(
Cons(
x, 
xs), 
Nil, 
n) → 
Nildomatch(
Nil, 
Nil, 
n) → 
Cons(
n, 
Nil)
prefix(
Cons(
x, 
xs), 
Nil) → 
Falseprefix(
Nil, 
cs) → 
Truedomatch(
patcs, 
Cons(
x, 
xs), 
n) → 
domatch[Ite](
prefix(
patcs, 
Cons(
x, 
xs)), 
patcs, 
Cons(
x, 
xs), 
n)
eqNatList(
Cons(
x, 
xs), 
Cons(
y, 
ys)) → 
eqNatList[Ite](
!EQ(
x, 
y), 
y, 
ys, 
x, 
xs)
eqNatList(
Cons(
x, 
xs), 
Nil) → 
FalseeqNatList(
Nil, 
Cons(
y, 
ys)) → 
FalseeqNatList(
Nil, 
Nil) → 
TruenotEmpty(
Cons(
x, 
xs)) → 
TruenotEmpty(
Nil) → 
Falsestrmatch(
patstr, 
str) → 
domatch(
patstr, 
str, 
Nil)
and(
False, 
False) → 
Falseand(
True, 
False) → 
Falseand(
False, 
True) → 
Falseand(
True, 
True) → 
True!EQ(
S(
x), 
S(
y)) → 
!EQ(
x, 
y)
!EQ(
0', 
S(
y)) → 
False!EQ(
S(
x), 
0') → 
False!EQ(
0', 
0') → 
Truedomatch[Ite](
False, 
patcs, 
Cons(
x, 
xs), 
n) → 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil)))
domatch[Ite](
True, 
patcs, 
Cons(
x, 
xs), 
n) → 
Cons(
n, 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil))))
eqNatList[Ite](
False, 
y, 
ys, 
x, 
xs) → 
FalseeqNatList[Ite](
True, 
y, 
ys, 
x, 
xs) → 
eqNatList(
xs, 
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
!EQ, prefix, domatch, eqNatList
They will be analysed ascendingly in the following order:
!EQ < prefix
prefix < domatch
!EQ < eqNatList
 
(9) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol !EQ.
(10) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x', 
xs'), 
Cons(
x, 
xs)) → 
and(
!EQ(
x', 
x), 
prefix(
xs', 
xs))
domatch(
Cons(
x, 
xs), 
Nil, 
n) → 
Nildomatch(
Nil, 
Nil, 
n) → 
Cons(
n, 
Nil)
prefix(
Cons(
x, 
xs), 
Nil) → 
Falseprefix(
Nil, 
cs) → 
Truedomatch(
patcs, 
Cons(
x, 
xs), 
n) → 
domatch[Ite](
prefix(
patcs, 
Cons(
x, 
xs)), 
patcs, 
Cons(
x, 
xs), 
n)
eqNatList(
Cons(
x, 
xs), 
Cons(
y, 
ys)) → 
eqNatList[Ite](
!EQ(
x, 
y), 
y, 
ys, 
x, 
xs)
eqNatList(
Cons(
x, 
xs), 
Nil) → 
FalseeqNatList(
Nil, 
Cons(
y, 
ys)) → 
FalseeqNatList(
Nil, 
Nil) → 
TruenotEmpty(
Cons(
x, 
xs)) → 
TruenotEmpty(
Nil) → 
Falsestrmatch(
patstr, 
str) → 
domatch(
patstr, 
str, 
Nil)
and(
False, 
False) → 
Falseand(
True, 
False) → 
Falseand(
False, 
True) → 
Falseand(
True, 
True) → 
True!EQ(
S(
x), 
S(
y)) → 
!EQ(
x, 
y)
!EQ(
0', 
S(
y)) → 
False!EQ(
S(
x), 
0') → 
False!EQ(
0', 
0') → 
Truedomatch[Ite](
False, 
patcs, 
Cons(
x, 
xs), 
n) → 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil)))
domatch[Ite](
True, 
patcs, 
Cons(
x, 
xs), 
n) → 
Cons(
n, 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil))))
eqNatList[Ite](
False, 
y, 
ys, 
x, 
xs) → 
FalseeqNatList[Ite](
True, 
y, 
ys, 
x, 
xs) → 
eqNatList(
xs, 
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
prefix, domatch, eqNatList
They will be analysed ascendingly in the following order:
prefix < domatch
 
(11) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol prefix.
(12) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x', 
xs'), 
Cons(
x, 
xs)) → 
and(
!EQ(
x', 
x), 
prefix(
xs', 
xs))
domatch(
Cons(
x, 
xs), 
Nil, 
n) → 
Nildomatch(
Nil, 
Nil, 
n) → 
Cons(
n, 
Nil)
prefix(
Cons(
x, 
xs), 
Nil) → 
Falseprefix(
Nil, 
cs) → 
Truedomatch(
patcs, 
Cons(
x, 
xs), 
n) → 
domatch[Ite](
prefix(
patcs, 
Cons(
x, 
xs)), 
patcs, 
Cons(
x, 
xs), 
n)
eqNatList(
Cons(
x, 
xs), 
Cons(
y, 
ys)) → 
eqNatList[Ite](
!EQ(
x, 
y), 
y, 
ys, 
x, 
xs)
eqNatList(
Cons(
x, 
xs), 
Nil) → 
FalseeqNatList(
Nil, 
Cons(
y, 
ys)) → 
FalseeqNatList(
Nil, 
Nil) → 
TruenotEmpty(
Cons(
x, 
xs)) → 
TruenotEmpty(
Nil) → 
Falsestrmatch(
patstr, 
str) → 
domatch(
patstr, 
str, 
Nil)
and(
False, 
False) → 
Falseand(
True, 
False) → 
Falseand(
False, 
True) → 
Falseand(
True, 
True) → 
True!EQ(
S(
x), 
S(
y)) → 
!EQ(
x, 
y)
!EQ(
0', 
S(
y)) → 
False!EQ(
S(
x), 
0') → 
False!EQ(
0', 
0') → 
Truedomatch[Ite](
False, 
patcs, 
Cons(
x, 
xs), 
n) → 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil)))
domatch[Ite](
True, 
patcs, 
Cons(
x, 
xs), 
n) → 
Cons(
n, 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil))))
eqNatList[Ite](
False, 
y, 
ys, 
x, 
xs) → 
FalseeqNatList[Ite](
True, 
y, 
ys, 
x, 
xs) → 
eqNatList(
xs, 
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
domatch, eqNatList
 
(13) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol domatch.
(14) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x', 
xs'), 
Cons(
x, 
xs)) → 
and(
!EQ(
x', 
x), 
prefix(
xs', 
xs))
domatch(
Cons(
x, 
xs), 
Nil, 
n) → 
Nildomatch(
Nil, 
Nil, 
n) → 
Cons(
n, 
Nil)
prefix(
Cons(
x, 
xs), 
Nil) → 
Falseprefix(
Nil, 
cs) → 
Truedomatch(
patcs, 
Cons(
x, 
xs), 
n) → 
domatch[Ite](
prefix(
patcs, 
Cons(
x, 
xs)), 
patcs, 
Cons(
x, 
xs), 
n)
eqNatList(
Cons(
x, 
xs), 
Cons(
y, 
ys)) → 
eqNatList[Ite](
!EQ(
x, 
y), 
y, 
ys, 
x, 
xs)
eqNatList(
Cons(
x, 
xs), 
Nil) → 
FalseeqNatList(
Nil, 
Cons(
y, 
ys)) → 
FalseeqNatList(
Nil, 
Nil) → 
TruenotEmpty(
Cons(
x, 
xs)) → 
TruenotEmpty(
Nil) → 
Falsestrmatch(
patstr, 
str) → 
domatch(
patstr, 
str, 
Nil)
and(
False, 
False) → 
Falseand(
True, 
False) → 
Falseand(
False, 
True) → 
Falseand(
True, 
True) → 
True!EQ(
S(
x), 
S(
y)) → 
!EQ(
x, 
y)
!EQ(
0', 
S(
y)) → 
False!EQ(
S(
x), 
0') → 
False!EQ(
0', 
0') → 
Truedomatch[Ite](
False, 
patcs, 
Cons(
x, 
xs), 
n) → 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil)))
domatch[Ite](
True, 
patcs, 
Cons(
x, 
xs), 
n) → 
Cons(
n, 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil))))
eqNatList[Ite](
False, 
y, 
ys, 
x, 
xs) → 
FalseeqNatList[Ite](
True, 
y, 
ys, 
x, 
xs) → 
eqNatList(
xs, 
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
eqNatList
 
(15) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol eqNatList.
(16) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x', 
xs'), 
Cons(
x, 
xs)) → 
and(
!EQ(
x', 
x), 
prefix(
xs', 
xs))
domatch(
Cons(
x, 
xs), 
Nil, 
n) → 
Nildomatch(
Nil, 
Nil, 
n) → 
Cons(
n, 
Nil)
prefix(
Cons(
x, 
xs), 
Nil) → 
Falseprefix(
Nil, 
cs) → 
Truedomatch(
patcs, 
Cons(
x, 
xs), 
n) → 
domatch[Ite](
prefix(
patcs, 
Cons(
x, 
xs)), 
patcs, 
Cons(
x, 
xs), 
n)
eqNatList(
Cons(
x, 
xs), 
Cons(
y, 
ys)) → 
eqNatList[Ite](
!EQ(
x, 
y), 
y, 
ys, 
x, 
xs)
eqNatList(
Cons(
x, 
xs), 
Nil) → 
FalseeqNatList(
Nil, 
Cons(
y, 
ys)) → 
FalseeqNatList(
Nil, 
Nil) → 
TruenotEmpty(
Cons(
x, 
xs)) → 
TruenotEmpty(
Nil) → 
Falsestrmatch(
patstr, 
str) → 
domatch(
patstr, 
str, 
Nil)
and(
False, 
False) → 
Falseand(
True, 
False) → 
Falseand(
False, 
True) → 
Falseand(
True, 
True) → 
True!EQ(
S(
x), 
S(
y)) → 
!EQ(
x, 
y)
!EQ(
0', 
S(
y)) → 
False!EQ(
S(
x), 
0') → 
False!EQ(
0', 
0') → 
Truedomatch[Ite](
False, 
patcs, 
Cons(
x, 
xs), 
n) → 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil)))
domatch[Ite](
True, 
patcs, 
Cons(
x, 
xs), 
n) → 
Cons(
n, 
domatch(
patcs, 
xs, 
Cons(
n, 
Cons(
Nil, 
Nil))))
eqNatList[Ite](
False, 
y, 
ys, 
x, 
xs) → 
FalseeqNatList[Ite](
True, 
y, 
ys, 
x, 
xs) → 
eqNatList(
xs, 
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
No more defined symbols left to analyse.